/**
 * 
 */
package br.edu.unoesc.smschool.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @author Luiz
 * data: 15/08/2011
 */
@Entity
public class Material extends GenericModel implements Comparable<Material> {
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long codigo;
	@Column(nullable = false)
	private String titulo;
	private String descricao;
	@Column(nullable=false)
	private String tipoMaterial;
	private String publicacao;
	private String autor;
	private String editora;
	private String localizacao;
	
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getTipoMaterial() {
		return tipoMaterial;
	}

	public void setTipoMaterial(String tipoMaterial) {
		this.tipoMaterial = tipoMaterial;
	}

	public String getPublicacao() {
		return publicacao;
	}

	public void setPublicacao(String publicacao) {
		this.publicacao = publicacao;
	}

	public String getAutor() {
		return autor;
	}

	public void setAutor(String autor) {
		this.autor = autor;
	}

	public String getEditora() {
		return editora;
	}

	public void setEditora(String editora) {
		this.editora = editora;
	}

	public String getLocalizacao() {
		return localizacao;
	}

	public void setLocalizacao(String localizacao) {
		this.localizacao = localizacao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getDescricao() {
		return descricao;
	}
	
	@Override
	public Long getCodigo() {
		return codigo;
	}
	
	@Override
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	@Override
	public boolean equals(Object obj) {
		Material outro = (Material) obj;
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		Material that = (Material) obj;
		return new EqualsBuilder().append(this.getTitulo(), outro.getTitulo())
				.isEquals();
	}

	@Override
	public int hashCode() {
		int obj1 = 0;
		int obj2 = 0;
		if (obj1 == obj2)
			return obj1;
		if (obj2 == obj1)
			return obj2;
		return new HashCodeBuilder().append(this.getTitulo()).hashCode();
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
				.append("Titulo", this.getTitulo()).toString();
	}

	public int compareTo(Material o) {
		return new CompareToBuilder().append(this.getTitulo(), o.getTitulo())
				.toComparison();
	}

}
